﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BostonXNA.FiniteStateMachine
{
	public interface IFiniteStateMachine<T>
	{
		event EventHandler BeforeStateChange;

		event EventHandler StateChanging;

		event EventHandler AfterStateChange;

		IState CurrentState
		{
			get;
			set;
		}

		IEnumerable<IState> States
		{
			get;
			set;
		}

		IEnumerable<ITransition<T>> Transitions
		{
			get;
			set;
		}

		void Update( T stateEvent );
	}
}
